#include "main.h"
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
void DIF__vAltitudeCalculation(void)
{
    /* 当前高度数据结构，从Dpool中读取数据 */
    DIF__tstAltitudeDpoolData stDIFAltitudeDpool;

    /* 静态变量，用于记录上一次的有效高度值 */
    static int16_t s16LastValidAltitude = 0;
    static int16_t s16CurrentAltitude = 0;

    /**************************************************************************
     * 接口函数说明
     * SYN_u8HeiLvlSign()        : 获取CAN信号HeiLvlSign的值 (0=正, 1=负)
     * SYN_u16HeiLvl()           : 获取CAN信号HeiLvl的值 (0x0000~0x1FFE有效, 0x1FFF无效)
     * stDIFAltitudeDpool.DIF_u16AltitudeValue: Dpool成员，记录高度绝对值
     * stDIFAltitudeDpool.DIF_u8AltitudeSign   : Dpool成员，记录高度符号
     * stDIFAltitudeDpool.DIF_u8AltitudeUnit   : Dpool成员，记录高度单位（默认m）
     **************************************************************************/

     /* 从Dpool读取当前的显示数据 */
    DPOOL_enGetPoolData(DPOOL_nDataDIF_stAltitudeDpoolData, &stDIFAltitudeDpool);

    /*============== 核心逻辑开始 ==============*/

    /* 获取当前CAN信号的高度值与符号标志 */
    uint16_t u16HeiLvl = SYN__u16HeiLvl();
    uint8_t  u8HeiSign = SYN__u8HeiLvlSign();

    /* 判断CAN信号 HeiLvl 是否为无效值 (0x1FFF) */
    if (u16HeiLvl == 0x1FFF)
    {
        /* 无效值时使用上次有效值保持显示稳定 */
        s16CurrentAltitude = s16LastValidAltitude;
    }
    else
    {
        if (u16HeiLvl == 0x0000)
        {
            /* 高度为0 */
            s16CurrentAltitude = 0;
            s16LastValidAltitude = 0;
        }
        else if (u8HeiSign == 0) /* 正值 */
        {
            if (u16HeiLvl <= 0x1FFE)  /* 合法范围 */
            {
                s16CurrentAltitude = (int16_t)u16HeiLvl;
                s16LastValidAltitude = s16CurrentAltitude;
            }
            else
            {
                /* 超限时保留上次值 */
                s16CurrentAltitude = s16LastValidAltitude;
            }
        }
        else /* 负值 */
        {
            if (u16HeiLvl <= 0x03E7) /* 负值范围 -999m以内有效 */
            {
                s16CurrentAltitude = -(int16_t)u16HeiLvl;
                s16LastValidAltitude = s16CurrentAltitude;
            }
            else
            {
                /* 超限时保留上次值 */
                s16CurrentAltitude = s16LastValidAltitude;
            }
        }
    }

    /*============== 核心逻辑结束 ==============*/

    /* 更新Dpool数据，用于后续显示模块 */
    stDIFAltitudeDpool.DIF_u16AltitudeValue =(s16CurrentAltitude >= 0) ?(uint16_t)s16CurrentAltitude :(uint16_t)(-s16CurrentAltitude); /* 绝对值 */
    stDIFAltitudeDpool.DIF_u8AltitudeSign = (s16CurrentAltitude >= 0) ? 0 : 1; /* 符号 (0=正, 1=负) */
    //stDIFAltitudeDpool.DIF_u8AltitudeUnit = 0; /* 单位: 米 */
    stDIFAltitudeDpool.DIF_u8AltitudeUnit =
    /* 将结果写回Dpool */
    DPOOL_enSetPoolData(DPOOL_nDataDIF_stAltitudeDpoolData, &stDIFAltitudeDpool);
}